package com.tanhua.management.util;

import com.tanhua.management.pojo.Admin;
import com.tanhua.management.vo.AdminVo;


/**
 * ThreadLocal提供了线程内存储变量的能力，
 * 这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。
 * 通过get和set方法就可以得到当前线程对应的值。
 *
 * 做个不恰当的比喻，从表面上看ThreadLocal相当于维护了一个map，key就是当前的线程，value就是需要存储的对象。
 */
public class UserThreadLocal {

    private static final ThreadLocal<AdminVo> LOCAL = new ThreadLocal<AdminVo>();

    private UserThreadLocal() {

    }

    //通过set方法,将这个 token

    /**
     * 内部原理:
     *      Thread t = Thread.currentThread();
     *         ThreadLocalMap map = getMap(t);
     *         if (map != null)
     *             map.set(this, value);
     *         else
     *             createMap(t, value);
     *         return value;
     *   通过map将 当前的线程当做 key
     *   将传输的 值 当做 value
     */
    public static void set(AdminVo adminVo) {
        //将 user当作 value
        LOCAL.set(adminVo);
    }

    public static AdminVo get() {
        //通过 get 得到 这个 user
        return LOCAL.get();
    }

}
